Micro-XRCE-DDS 相关细节和 ROS2 集成
标签
ROS2-humble
microROS
DDS
XRCE-DDS
Zephyr
STM32
embedded
字数
746 字
阅读时间
4 分钟
系统架构
核心组件说明:
Zephyr RTOS:资源受限设备的实时操作系统
Micro-XRCE-DDS Client:
- 运行在嵌入式设备上的轻量级库
- 实现DDS协议的核心子集
- 资源要求低(RAM < 10KB)
Micro-XRCE-DDS Agent:
- 运行在Linux/Windows主机上
- 作为Client与DDS网络之间的桥梁
- 实现完整DDS功能
ROS 2 DDS中间件:
- 使用Fast DDS/Cyclone DDS等实现
- 提供分布式通信能力
Agent与Client关系详解
区别对比
| 特性 | Client | Agent |
|---|---|---|
| 定位 | DDS协议轻量化子集 | 完整DDS代理 |
| 运行环境 | 嵌入式设备(MCU) | Linux/Windows主机 |
| 资源需求 | RAM: <10KB | RAM: >10MB |
| 功能范围 | 序列化/反序列化 | DDS域管理、QoS策略、类型发现 |
| 连接方式 | UART/UDP/TCP | 监听Client连接,连接DDS域 |
协作流程
DDS与ROS2之间的类型转换
话题名称转换机制
ROS2话题名称 → DDS主题名称:
ROS2话题:/sensor/temperature
DDS主题:rt/sensor/temperature转换规则:
- 添加前缀
rt/
在Micro-XRCE-DDS Client中的实现:
c
#define ROS_DDS_TOPIC_NAME(topic) "rt" topic该约定在官方 ROS 2 设计文档中有完整记录。
| ROS Subsystem | Prefix |
|---|---|
| ROS Topics | rt |
| ROS Service Request | rq |
| ROS Service Response | rr |
| ROS Service | rs |
| ROS Parameter | rp |
| ROS Action | ra |
下面是官方给出的一些示例
| ROS Name | DDS Topic |
|---|---|
/foo | rt/foo |
rostopic:///foo/bar | rt/foo/bar |
/robot1/camera_left/image_raw | rt/robot1/camera_left/image_raw |
数据类型转换机制
ROS2数据类型 ➔ DDS类型
以 std_msgs/msg/String 为例:
ROS2消息类型:std_msgs/String
DDS类型:std_msgs::msg::dds_::String_在std_msgs和String之间插入::msg::dds_::,并在末尾添加_
如果是service类型,中间就换成插入::srv::dds_::,并在末尾添加_
自定义消息转换流程
Zephyr集成实践
Github | discodyer/mirac-dds-app
参考代码仓:
- Github | micro-ROS/micro_ros_setup
- Github | Micro-XRCE-DDS-Apps/Zephyr
- Github | micro-ROS/micro_ros_zephyr_module
- Github | PX4 - uxrce_dds_client
- Github | ArduPilot - AP_DDS
- Github | yashi/micro-xrce-dds-client
调试命令
启动Agent:
- 启动Agent并以串口方式连接:
MicroXRCEAgent serial --dev /dev/ttyACM1 -b 115200 -v6 -d查看话题:
ros2 topic listros2 topic info /HelloWorldTopic --verbose
Type: std_msgs/msg/String Publisher count: 1 Node name: _CREATED_BY_BARE_DDS_APP_ Node namespace: _CREATED_BY_BARE_DDS_APP_ Topic type: std_msgs/msg/String Endpoint type: PUBLISHER GID: 01.0f.df.04.c0.0d.11.cb.00.00.00.00.00.00.01.03.00.00.00.00.00.00.00.00 QoS profile: Reliability: RELIABLE History (Depth): UNKNOWN Durability: VOLATILE Lifespan: Infinite Deadline: Infinite Liveliness: AUTOMATIC Liveliness lease duration: Infinite Subscription count: 0ros2 topic echo /HelloWorldTopic
data: 'Hello from Zephyr! Count: 119' ---
相关资料
- Github | ArduPilot - Testing with DDS/micro-Ros
- PX4 Guide | uXRCE-DDS (PX4-ROS 2/DDS Bridge)
- Github | micro-ROS/micro_ros_setup
- Github | Micro-XRCE-DDS-Apps/Zephyr
- Github | micro-ROS/micro_ros_zephyr_module
- Github | PX4 - uxrce_dds_client
- Github | ArduPilot - AP_DDS
- Github | yashi/micro-xrce-dds-client
- microROS | First micro-ROS Application on Zephyr
- Micro-XRCE-DDS-Client | Documentation
- Zephyr | Modules (External projects)
- Zephyr | West Manifests - Git Submodules in Projects
- 知乎 | ROS2设计文章系列之十九 —— 话题和服务名称到DDS的映射
- ROS2 Design | Topic and Service name mapping to DDS
- Safe DDS | Type Name convention between DDS types and ROS 2 types
- ROS2 | QoS profiles
- ROS2 | Different ROS 2 middleware vendors
Cody Gu